package CutLoad.transitions
{
	import flash.geom.Point;

	/**
	 * 缓动基础类 
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */
	public class Easing extends TBase
	{
		//目标坐标
		protected var startNum:Number,targetNum:Number;
		protected var endSet:Number;
		//初始值
		//缓动参数
		protected var offset:Number;
		//
		protected var record:Record;
		/**
		 * 初始化 
		 * @param startNum 开始的数值
		 * @param targetNum 结束的数值
		 * @param endSet 结束时参值,就是与targetNum设置的值的差的最小值,如果达到这个数，缓动将会结束
		 * @param offset 缓动参数
		 * 
		 */		
		public function Easing(startNum:Number,targetNum:Number,endSet:Number=1,offset:Number=0.2)
		{
			cs=0;
			this.offset=offset;
			this.startNum=startNum;
			this.currNum=startNum
			this.targetNum=targetNum;
			this.endSet=endSet;
			record=new Record();
			this.initAllFun();
		}
		/**
		 * 循环
		 * 
		 */		
		override public function enterFrame():void{
			if(state==0) return;
			var vNum:Number=this.targetNum-this.currNum;
			if(Math.abs(vNum)<this.endSet){
				cs=0;
				currNum=targetNum;
				funEnd(targetNum);
				record.push(currNum);
				//
				this.currNum=startNum
				return ;
			}
			vNum*=this.offset;		
			currNum+=vNum
			funEnterFrame(currNum);
			//
			record.push(currNum);
		}
		/**
		 * 开始 
		 * 
		 */		
		override public function start(someData:TransitionsData=null):void{
			//每一次开始，都要重新记录
			super.start();
			record.clear();
			record.push(startNum);
		}
		/**
		 * 设置 循环时要调用的外部函数
		 * @param fun 格式:function(当前值:Number):void
		 * 
		 */		
		override public function setFunEnterFrame(fun:Function):void{
			this.funEnterFrame=fun;
		}
		/**
		 * 设置结束时要调用的外部函数 
		 * @param fun 格式:function(当前值:Number):void
		 * 
		 */
		override public function setFunEnd(fun:Function):void{
			this.funEnd=fun;
		}
		/**
		 * 返回效果在此过程中的数据记录对象 
		 * @return 
		 * 
		 */		
		public function getRecord():Record{
			return record
		}
	}
}